#ifndef _XX_YY_BMOCK_IN_OUT_STR_ARG_VAL
#define _XX_YY_BMOCK_IN_OUT_STR_ARG_VAL
#include "bmock_in_out_arg_val.hpp"
#include "bmock_out_str_arg_val.hpp"

namespace bmock {
	struct in_out_str_arg_val : public out_str_arg_val {
		            in_out_str_arg_val(const char *const n,char *const vp);
	protected:
		std::string get_in_value(const arg_checker &chk) const;
		std::string get_in_value() const;
		std::string get_out_value(const arg_checker &chk) const;
		bool        validate(const arg_checker &chk,const std::string &v) const;
		bool		validate_no_msg(const arg_checker &chk, const std::string &v) const;
		void        print(std::ostream &os) const;
					~in_out_str_arg_val();
	};

	inline arg_val *const make_in_out_arg_val(const char *const n,char *const vp) {
		return new in_out_str_arg_val(n,vp);
	}
	
	inline arg_val *const make_in_out_arg_val(const char *const n,unsigned char *const vp) {
		return new in_out_str_arg_val(n,(char *const)vp);
	}
}

#endif